define(function(require, exports, module) {
	var $ = require('bigfoot/common');
	var Carousel  = require('./main');
    var Touch     = require('dhtml/touch');

    module.exports = {
        interval: 4000,         // @cfg {Number} 执行切换动作的毫秒数
        autoStart : true,       // @cfg {Boolean} 是否自动启动
        isLoop :    true,       // @cfg {Boolean} 到达边界（0|Max）后，是否继续切换，也就是说是否循环的。
        isRunning : false,      // @type {Boolean} 定时器是否运转中。
        isPauseOnClick : true,  // cfg {Boolean} 是否按下便暂停
        init : function(){

            Touch.call(this, { 
                moverEl : this.mover
            });

            this.on('moving',    onDraging);
            this.on('afterMove', afterDrag);


    	    this.on('itemSwitch', this.onItemSwitch, this);
    	    this.on('beforeMove', PauseOnClick, this);
            
            this.run = this.resume;
            this.run();

            this.pause = PauseOnClick;
            this.beforDrag = PauseOnClick;
        },

        // 启动/恢复轮转
        resume : function () {
            if(this.isRunning === true && this.timer){ // 如果有先清楚之前的？？
                window.clearInterval(this.timer);
            }
            this.timer = window.setInterval(this.goNext.bind(this), this.interval);
            this.isRunning = true;
        }
    };


    /**
     * 清楚定时器并标记 isRunning = false。
     */
    function PauseOnClick() {
        if(this.isRunning == true){
            console.log('暂停 item 切换');
            window.clearInterval(this.timer);
            this.isRunning = false;
        }
    }

      // 正在移动着所执行的方法
    function onDraging(e, direction, x, lastX, disX){
        var el = this.cfg.moverEl;          // 正在移动着的元素
        var el_Left = Fx.getLeft(el);
        var isReturnFalse;
        // debugger;
        // if(window.navigator.isAndroid_4){
        //     return false;
        // }
        //  限制到边距
        // if(direction == 'right' && this.isEOF){
        //  return false;
        // }
        // if(direction == 'left' && this.isBOF){
        //  return false;
        // }
        if((direction == 'right' || direction == 'left')  && disX >= 2){
            var leftValue = el_Left + (x - lastX);
            Fx.moveByLeft(el, leftValue);
            e && e.preventDefault();

            // isReturnFalse = true; // 不上下滚动
        }else{
         // var dir = moveObj.eventObj_direction_dis[1];
         
         // if(dir == 'left' || dir== 'right'){ // for Android only
            // e.preventDefault();   
         // }
            
            console.log('接触了边缘，禁止移动');
            isReturnFalse = false; // 可以滚动
        }
    }

    function afterDrag(e, direction, lastX, disX) {
        // console.log('[afterDrag]移动完毕，方向{0}，距离{1}'.format(direction, disX));

        if (direction == 'right' && !this.isEOF && disX >= 1) {
            // right2left
            this.moveFn();
        } else if (direction == 'left' && disX >= 1) {
            // left2right
            this.moveFn(true);
        }
    }  
});

/**
 * @class $$.indicator 指示器
 */
define(function(require, exports, module) {
    var $$ = require('common/lang');
    
    module.exports = $$.define(Object, function(){
        /**
         * 创建提示内容。
         * @param {Number} index
         * @param {Element} frag HTML 片断
         * @param {Function} onClk_handler
         */
        function create_Carousel_Indicator(index, frag, onClk_handler) {
            var p = document.createElement('div');
            p.className = 'index_' + index;

            // 是否需要点击的？
            p.onClk(onClk_handler);
            frag.appendChild(p);
        }

        /**
         * 点击事件
         * @param {Event} e
         */
        function onIndicatorItemClick(e){
            var goToIndex = e.target.className;
            goToIndex = goToIndex.match(/\d+/);
            goToIndex = goToIndex[0];
            goToIndex = Number(goToIndex);

            this.pause();
            this.items[goToIndex].style.display = 'block';
            this.go(goToIndex);

            this.onItemSwitch(goToIndex + 1);
        }

       /**
        * 创建指示器（一点点的）
        * 如果有 indicator 标签，表示需要指示器。indicator 位于 x_carouselContainer 之下。
        * 如不需要，不写 <p class="indicator"></p> 标签即可。
        *  <p class="x_carouselContainer">
            <p class="indicator"></p>
        </p>
        * @private
        */
        this.init = function indicator() {
            var indicatorContainer = this.container.querySelector('.indicator');
            if (indicatorContainer) {
                var frag = document.createDocumentFragment();
                var onClk_handler = onIndicatorItemClick.bind(this);

                for(var i = 0, j = this.len; i < j; i++){
                    create_Carousel_Indicator(i, frag, onClk_handler);
                }
                indicatorContainer.appendChild(frag);

                this.onItemSwitch(0);
            }
        }

       /**
        * 设置 indicator 高亮。注意索引从第一开始。
        * @param {Number} index
        */
        this.onItemSwitch = function (index) {
            var indicators = this.container.querySelectorAll('.indicator div');
            if (indicators && indicators.length) {
                for (var i = 0, j = indicators.length; i < j; i++) {
                    indicators[i].removeCls('current'); // Reset
                }

                indicators[index].addCls('current');
            }
        }
    });
});